package com.shuiyihan.design.structure.proxy.cglib;

import com.shuiyihan.design.structure.proxy.jdk.JdkMedium;
import com.shuiyihan.design.structure.proxy.jdk.LandlordService;
import com.shuiyihan.design.structure.proxy.jdk.LandlordServiceImpl;
import org.springframework.cglib.proxy.Enhancer;

import java.lang.reflect.Proxy;

/**
 * 代理模式测试
 *
 * @since 2021/8/27
 **/
public class CglibMediumTest {
    /*
     * JDK 代理 步骤
     *
     * 1.代理过程可以实现MethodInterceptor(callback)接口中的invoke来实现
     * 2.通过Enhancer来创建代理对象
     */

    public static void main(String[] args) {
        //1.指定被创建代理的对象
        LandlordService landlordService = new LandlordServiceImpl();
        //2.创建代理
        //2.1 被代理对象的字节码
        //2.2 Callback代理过程对象
        LandlordServiceImpl landlordServiceProxy = (LandlordServiceImpl) Enhancer.create(LandlordServiceImpl.class, new CglibMedium(landlordService));
        //3.调用代理中指定的方法
        landlordServiceProxy.pay("张三");
    }


}
